// 排序预处理:保证所有区间按起始值升序排列，使重叠区间必然相邻
// 合并逻辑:当前区间起始 ≤ 前一个区间结束 → 发生重叠。合并后的区间结束值取两者的较大值
// 非重叠处理：直接加入结果数组作为新区间


function merge(intervals) {
  if (intervals.length <= 1) return intervals;

  // 1. 按区间起始值排序
  intervals.sort((a, b) => a[0] - b[0]);

  const merged = [intervals[0]];

  // 2. 遍历并合并重叠区间
  for (let i = 1; i < intervals.length; i++) {
    const last = merged[merged.length - 1];
    const current = intervals[i];

    // 检查重叠：当前区间的起始 <= 上一个区间的结束
    if (current[0] <= last[1]) {
      // 合并区间（更新结束值为两者较大值）
      last[1] = Math.max(last[1], current[1]);
    } else {
      merged.push(current);
    }
  }

  return merged;
}

// 测试示例
console.log(merge([[1, 3], [2, 6], [8, 10], [15, 18]]));
// 输出 [[1,6],[8,10],[15,18]]

console.log(merge([[1, 4], [4, 5]]));
// 输出 [[1,5]]

console.log(merge([[1, 4], [0, 4]]));
// 输出 [[0,4]]